package com.yida.wy.vote.service.impl;


import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONUtil;
import com.yida.common.core.utils.DateUtils;
import com.yida.common.core.utils.StringUtils;
import com.yida.common.security.utils.SecurityUtils;
import com.yida.wy.vote.domain.WyVoteTemplate;
import com.yida.wy.vote.mapper.WyVoteTemplateMapper;
import com.yida.wy.vote.service.IWyVoteTemplateService;
import com.yida.wy.vote.domain.vo.WyVoteItemVo;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 投票模板Service业务层处理
 *
 * @author lqq
 * @date 2023-03-10
 */
@Service
public class WyVoteTemplateServiceImpl implements IWyVoteTemplateService {

    @Resource
    private WyVoteTemplateMapper voteTemplateMapper;

    /**
     * 查询投票模板
     *
     * @param templateId 投票模板主键
     * @return 投票模板
     */
    @Override
    public WyVoteTemplate selectVoteTemplateByTemplateId(Long templateId) {
        return voteTemplateMapper.selectVoteTemplateByTemplateId(templateId);
    }

    /**
     * 查询投票模板
     *
     * @param voteId 投票主键
     * @return 投票模板
     */
    @Override
    public WyVoteTemplate selectVoteTemplateByVoteId(Long voteId) {
        return voteTemplateMapper.selectVoteTemplateByVoteId(voteId);
    }

    /**
     * 查询投票模板列表
     *
     * @param voteTemplate 投票模板
     * @return 投票模板
     */
    @Override
    public List<WyVoteTemplate> selectVoteTemplateList(WyVoteTemplate voteTemplate) {
        return voteTemplateMapper.selectVoteTemplateList(voteTemplate);
    }

    /**
     * 新增投票模板
     *
     * @param voteTemplate 投票模板
     * @return 结果
     */
    @Override
    public int insertVoteTemplate(WyVoteTemplate voteTemplate) {
        voteTemplate.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getRealName());
        voteTemplate.setCreateTime(DateUtils.getNowDate());
        return voteTemplateMapper.insertVoteTemplate(voteTemplate);
    }

    /**
     * 修改投票模板
     *
     * @param voteTemplate 投票模板
     * @return 结果
     */
    @Override
    public int updateVoteTemplate(WyVoteTemplate voteTemplate) {
        voteTemplate.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getRealName());
        voteTemplate.setUpdateTime(DateUtils.getNowDate());
        return voteTemplateMapper.updateVoteTemplate(voteTemplate);
    }

    /**
     * 修改投票模板
     *
     * @param voteTemplate 投票模板
     * @return 结果
     */
    @Override
    public int updateVoteTemplateByVoteId(WyVoteTemplate voteTemplate) {
        voteTemplate.setUpdateBy(SecurityUtils.getLoginUser().getSysUser().getRealName());
        voteTemplate.setUpdateTime(DateUtils.getNowDate());
        return voteTemplateMapper.updateVoteTemplateByVoteId(voteTemplate);
    }

    /**
     * 批量删除投票模板
     *
     * @param templateIds 需要删除的投票模板主键
     * @return 结果
     */
    @Override
    public int deleteVoteTemplateByTemplateIds(Long[] templateIds) {
        return voteTemplateMapper.deleteVoteTemplateByTemplateIds(templateIds);
    }

    /**
     * 删除投票模板信息
     *
     * @param templateId 投票模板主键
     * @return 结果
     */
    @Override
    public int deleteVoteTemplateByTemplateId(Long templateId) {
        return voteTemplateMapper.deleteVoteTemplateByTemplateId(templateId);
    }

    /**
     * 新增模板
     *
     * @param voteId    投票ID
     * @param voteTitle 投票标题
     * @return 结果
     */
    @Override
    public int addVoteTemplate(Long voteId, String voteTitle) {
        //设置投票项和项的选项ID
        String DEFAULT_TEMPLATE = "[{\"itemSort\":1,\"itemType\":0,\"itemName\":\"" + voteTitle + "\",\"selectFlag\":0,\"content\":[{\"optionSort\":1,\"optionName\":\"同意\",\"selectFlag\":0,\"agreeFlag\":1},{\"optionSort\":2,\"optionName\":\"不同意\",\"selectFlag\":0,\"agreeFlag\":0}]}]";
        List<WyVoteItemVo> voteItemVos = JSONUtil.toList(DEFAULT_TEMPLATE, WyVoteItemVo.class);
        genItemAndOptionId(voteItemVos);
        //插入投票模板
        WyVoteTemplate template = new WyVoteTemplate() {{
            //投票模板
            setTemplateJson(JSONUtil.toJsonStr(JSONUtil.parseArray(voteItemVos, false)));
            //投票ID
            setVoteId(voteId);
        }};
        return insertVoteTemplate(template);
    }

    /**
     * 为投票项和选项生成唯一ID
     *
     * @param voteItemVos 投票项集合
     */
    public void genItemAndOptionId(List<WyVoteItemVo> voteItemVos) {
        //设置投票项ID
        voteItemVos.forEach(i -> {
            if (StringUtils.isNull(i.getItemId())) {
                i.setItemId(String.valueOf(IdUtil.getSnowflakeNextId()));
            }
            //设置选项ID
            i.getContent().forEach(o -> {
                if (StringUtils.isNull(o.getOptionId())) {
                    o.setOptionId(String.valueOf(IdUtil.getSnowflakeNextId()));
                }
            });
        });
    }
}
